using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using FiltronASP.Logger;
using FiltronASP.Models.DAO.Interfaces;
using FiltronASP.Areas.Admin.Consts;

namespace FiltronASP.Models.DAO.Extensions
{
    /// <summary>
    /// Klasa zawierajaca rozszerzenia metod zwiazanych z tabela elementow menu.
    /// </summary>
    public static class MenuItemExtensions
    {
        /// <summary>
        /// Metoda okreslajaca czy edytowac za pomoca comba ze stronami (foldery i linki wewn), 
        /// czy za pomoca inputow (iframy, linki zewn).
        /// </summary>
        /// <param name="menuItem">menu item</param>
        /// <returns>true dla edycji przez comba</returns>
        public static bool EditionWithPageCombos(this MenuItem menuItem)
        {
            if (menuItem == null)
            {
                return false;
            }   //if
            IMenuItemTypeDAO menuItemTypeDAO = new MenuItemTypeDAO();
            MenuItemType menuItemType = menuItemTypeDAO.FindByPK(menuItem.item_type_id);
            if (menuItemType == null)
            {
                return false;
            }   //if
            return ((menuItemType.type_abbr.ToLower().Equals(MenusConsts.MENU_ITEM_TYPE_ABBR_FOLDER.ToLower()))
                || (menuItemType.type_abbr.ToLower().Equals(MenusConsts.MENU_ITEM_TYPE_ABBR_INT_LINK.ToLower())));
        }

        /// <summary>
        /// Metoda walidujaca zgodnosc edytowanych danych z indeksem na aliasie, linku i menu.
        /// </summary>
        /// <param name="menuItemDAO">menu item dao</param>
        /// <param name="itemAlias">alias</param>
        /// <param name="itemLink">link</param>
        /// <param name="menuId">menu</param>
        /// <param name="itemIdToExclude">id wylaczone z wyszukiwania</param>
        /// <returns>true, gdy ok, false wpp</returns>
        public static bool IsAliasLinkMenuIdUnique(this IMenuItemDAO menuItemDAO, string itemLink, string itemAlias,
            int? menuId, int? itemIdToExclude)
        {
            if (!menuId.HasValue)
            {
                Logger.MyLogger.Log("MenuItemExtensions exception: IsAliasLinkMenuIdUnique method, menu id null...");
                return false;
            }   //if
            if (!itemIdToExclude.HasValue)
            {
                Logger.MyLogger.Log("MenuItemExtensions exception: IsAliasLinkMenuIdUnique method, itemIdToExclude null...");
                return false;
            }   //if
            try
            {
                return (menuItemDAO.FindByAliasLinkMenuIdAndNotItemId(itemLink, itemAlias, 
                    menuId.Value, itemIdToExclude.Value) == null);
            }   //try
            catch (Exception ex)
            {
                MyLogger.Log(ex);
            }   //catch
            return false;
        }

    }
}
